var UserListUsersCache = [];
var ulCurChObj;

UsersList = function(container) {
	this.container = container;
	this.container.obj = this;
	this.type = container.className.match(/type_([a-z0-9]+)/)[1];
	this.allow = container.className.match(/allow_([0-9])/)[1];

	this.domUsers = [];
	this.domInput = $(".result_input" , this.container)[0];
	this.jList = $(".users_list_cont", this.container);

	var jOldUsers = $("a", this.jList);
	var oldIds = this.domInput.value.split(",");
	for(var i=0; i<jOldUsers.length; i++) {
		this.domUsers[oldIds[i]] = jOldUsers[i];
		var a1 = $("div", jOldUsers[i]);
		a1[0].obj = this;
		a1[0].objId = oldIds[i];
		a1.click(this._removeUser);
	}

	this.domUsername = $(".username_input" , this.container)[0];
	this.username = this.domUsername.value;
	this.domUsername.obj = this;
	this.domUsername.onkeypress =
	   this.domUsername.onchange = function(){this.obj.onChangeName.call(this.obj);};
	this.changeTimeout = 500;

	this.jPopupList = $(".popup_list", this.container);

	var addBtn = $(".add_button", this.container)[0];
	addBtn.obj = this;
	addBtn.onclick = function(){this.obj.tryAddUser()};
}

UsersList.prototype.onChangeName = function() {
	if(this.hTimer != null) {
		clearTimeout(this.hTimer);
	}
	ulCurChObj = this;
	this.hTimer = setTimeout(function(){ulCurChObj.getUsersList();}, this.changeTimeout);
}

UsersList.prototype.getUsersList = function() {
	if(this.username != this.domUsername.value) {
		this.username = this.domUsername.value;
		var cp = new cpaint();
		cp.set_env_object(this);
		cp.call(
			get__Url('/ajax'),
			'ajax_getUsersList',
			this.showUsersList,
			this.username
		);
	}
}

UsersList.prototype.showUsersList = function(result) {
	var items = result.ajaxResponse[0].item;
	//убить старые имена
	this.jPopupList.empty();
	this.jPopupList.show();
	if(!items || !items.length){
		this.jPopupList.append("<a>Совпадений не найдено</a>");
		return;
	}
	var i, a, name, id;
	for(i=0; i<items.length; i++) {
		id   = items[i].id[0].data
		name = items[i].name[0].data
		//запомним на будующее
		UserListUsersCache[id] = name;
		//создадим дивку
		a = document.createElement("a");
		a.innerHTML = name;
		a.obj = this;
		a.onclick=this.onSelectUser;
		this.jPopupList.append(a);
	}
}

UsersList.prototype.onSelectUser = function() {
	this.obj.domUsername.value = this.innerHTML;
}

UsersList.prototype.tryAddUser = function() {
 	var name = this.domUsername.value;
 	//поищем в кеше
	for(userId in UserListUsersCache) {
		if(UserListUsersCache[userId] == name) {
			this.addUser(userId, name);
			return false;
		}
	}
	//в кеше нет, запрос к серверу
	var cp = new cpaint();
	cp.set_env_object(this);
	cp.call(
		get__Url('/ajax'),
		'ajax_getUserId',
		this.onLoadUserId,
		name
	);

	return false;
}

UsersList.prototype.onLoadUserId = function(result) {
	var name = result.ajaxResponse[0].name[0].data;
	var id = result.ajaxResponse[0].user_id;
	if(!id)
		alert("Пользователя "+name+" не существует");
	else
		this.addUser(id[0].data, name);
}

UsersList.prototype.addUser = function(id,name) {
	if(this.domUsers[id]!=null){
		alert("Пользователь "+name+" уже добавлен в список!");
	}else{
		var a = document.createElement("a");
		$(a).html("<div>&nbsp;&nbsp;&nbsp;&nbsp;</div>"+name);
		var a1 = $("div", a);
		a1[0].obj = this;
		a1[0].objId = id;
		a1.click(this._removeUser);

		this.domUsers[id] = a;
		this.jList.append(a);
		this.updateUsersList();
		//если в противоположной есть такой пользователь - убить его
		if(this.oContr.domUsers[id] != null) {
			this.oContr.removeUser(id);
		}
	}
	this.jPopupList.hide();
}
//в контексте элемента DOM
UsersList.prototype._removeUser = function() {
	this.obj.removeUser(this.objId);
}

UsersList.prototype.removeUser = function(id) {
	$(this.domUsers[id]).remove();
	this.domUsers[id] = null;
	this.updateUsersList();
}

UsersList.prototype.updateUsersList = function() {
	var ids = [];
	for(userId in this.domUsers) {
		if(this.domUsers[userId] != null)
			ids.push(userId);
	}
	this.domInput.value = ids.join(",");
}

UsersList.prototype.setContr = function(oContr) {
	this.oContr = oContr;
}

function initUserLists(){
	var lists = $(".user_list_container");
	var os = {};
	var t;
	for(var i=0; i<lists.length; i++) {
		t = new UsersList(lists[i]);
		if(os[t.type] == null)
			os[t.type] = [t];
		else
			os[t.type][1] = t;
	}
	//проставим соответствие бан/разрешение
	for(o in os) {
		os[o][0].setContr(os[o][1]);
		os[o][1].setContr(os[o][0]);
	}
}

var minDate;
var dateEl;

function getPosition(objDom) {
	var ret = new Object;

	ret.width = objDom.offsetWidth;
	ret.height = objDom.offsetHeight;
	ret.left = 0;
	ret.top = 0;

	var obj = objDom;
	while(obj) {
		ret.left += obj.offsetLeft;
		ret.top += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return ret;
}

function initCalendar(domDate, dateInput) {
	dateEl = dateInput;
	var dates;
	var t;
	if($("#"+dateEl).attr("value")){
		dates = $("#"+dateEl).attr("value").split('-');
		t = new Date(dates[0], dates[1]-1, dates[2]);
	}else{
		t = new Date();
	}
	calendar = new Calendar(1, t,
		function(c, date) {onSelDate(date);c.destroy();},
		function(c) {c.destroy();}
	);

	t = new Date();
	t.setHours(0);

	calendar.setDateFormat("%Y-%m-%d");
	calendar.create();

	var pos = getPosition(domDate);
	calendar.showAt(pos.left, pos.top-182);

	return false;
}

function onSelDate(d) {
	$("#"+dateEl).attr("value",d);
}


function hintUsers(user){
	var cp = new cpaint();
	cp.call(
		get__Url('/ajax'),
		'ajax_getUsers',
		onCreateList,
		user
	);
	return false;
	//$("#"+dateEl)
}

function onCreateList(result){
	alert(result.ajaxResponse[0].test[0].data);
}

var votingDivs;
var votingMaxId=0;

function initStep5(){
	updateVotingDivs();
	$("#add_voting_btn").click(addVoting);
}

function addVoting(){
	var templ = $("#voting_block_").html();
	var div = document.createElement("div");
	div.innerHTML = templ;
	$("input:hidden", div).attr("value", ++votingMaxId);
	div.className = "nomination-block";
	$(votingDivs[votingDivs.length-1]).after(div);
	updateVotingDivs();
	return false;
}

function updateVotingDivs(){
	votingDivs = $(".nomination-block");
	var count = votingDivs.length;
	var i, div, a, id;
	for(i=0; i<count; i++) {
		div = $(votingDivs[i]);
		//номер номинации
		$("span", div).text(i + 1);
		//кнопка удалить (скрыть если есть только одна номинация)
		a = $("a", div);
		if(count>1) {
			a.show();
			a[0].objIndex = i;
			a.click(removeVotingDiv);
		}else
			a.hide();
		//ID
		id = $("input:hidden", div).attr("value");
		if(id > votingMaxId)
			votingMaxId = id;
	}
}

function removeVotingDiv(){
	$(votingDivs[this.objIndex]).remove();
	updateVotingDivs();
	return false;
}

function initStep2(){
	initUserLists();
}

function initStep3(){
	initUserLists();
}